package cn.com.huzo.service.manufacture;

import cn.com.huzo.model.entities.manufacture.CommissionProcessingContractHeaderEntity;
import cn.com.huzo.model.entities.manufacture.CommissionProcessingContractLinesMoEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * 加工承揽合同管理服务对象接口。
 *
 * @author 吴旭
 */
public interface CommissionProcessingContractHeaderManager extends GenericManager<CommissionProcessingContractHeaderEntity, Long> {

    /**
     * 得到新的单据号（根据规则自动生成）
     * <p>
     * @return @throws java.lang.Exception
     */
    String fetchNewBillNo() throws Exception;

    /**
     * 根据给定的标识，取得加工合同。
     *
     * @param headerId 加工合同标识
     * @param currentUserId 当前用户
     * @param workFlowId 加工合同审核工作流标识
     * @return
     * @throws java.lang.Exception
     */
    Map<String, Object> fetchByHeaderKey(Long headerId, Long currentUserId, Long workFlowId) throws Exception;

    /**
     * 取得该加工合同的款号
     *
     * @param headerKey 加工合同标识
     * @return
     * @throws java.lang.Exception
     */
    List<CommissionProcessingContractLinesMoEntity> fetchStyleNoByHeaderKey(Long headerKey) throws Exception;

    /**
     * 审核加工承揽合同
     *
     * @param headerId 加工承揽合同标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @param isCheckCurrentNode 是否针对当前流程做审核
     * @return 审核后状态
     * @throws Exception
     */
    Map<String, Object> doCheck(Long headerId, Long workFlowId, Short nodeOrder, Long checkedBy, Short isCheckCurrentNode) throws Exception;

    /**
     * 反审审核加工承揽合同
     *
     * @param headerId 加工承揽合同标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @return 审核后状态
     * @throws Exception
     */
    Map<String, Object> doUnCheck(Long headerId, Long workFlowId, Short nodeOrder, Long checkedBy) throws Exception;
}
